反初始化只適用於class,當一個類實例被釋放之前,反初始化器將被調用。關鍵字用deinit像是初始化用init一樣。
class Temp {
    deinit{
        print("Temp deinit")
    }
}
var temp:Temp? = Temp()
// 當可需類型的類實例變數為nil,實例將被釋放
temp = nil
反初始化應用
class User{
    let id: Int
    
    init(id: Int) {
        self.id = id
        print("User \(id) : I'm alive")
    }
    deinit{
        print("User \(id) : I'm dead")
    }
}
var users = [User]()
for i in 1...3 {
    let user = User(id: i)
    print("User \(user.id) : I'm in control")
}
print("Loop is finish")
users.removeAll()
print("Array is clear")
    
// 印出以下
//User 1 : I'm alive
//User 1 : I'm in control
//User 1 : I'm dead
//User 2 : I'm alive
//User 2 : I'm in control
//User 2 : I'm dead
//User 3 : I'm alive
//User 3 : I'm in control
//User 3 : I'm dead
//Loop is finish
//Array is clear
接下來,是錯誤處理的介紹